name: Publish llama-index to PyPI / GitHub

on:
  push:
    tags:
      - "v*"

  workflow_dispatch:

env:
  POETRY_VERSION: "1.6.1"
  PYTHON_VERSION: "3.9"

jobs:
  build-n-publish:
    name: Build and publish to PyPI
    if: github.repository == 'run-llama/llama_index'
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Set up python ${{ env.PYTHON_VERSION }}
        uses: actions/setup-python@v4
        with:
          python-version: ${{ env.PYTHON_VERSION }}
      - name: Install Poetry
        uses: snok/install-poetry@v1
        with:
          version: ${{ env.POETRY_VERSION }}
      - name: Install deps
        shell: bash
        run: pip install -e .
      - name: Cache tiktoken and nltk files
        shell: bash
        run: python -c "from llama_index.core import get_tokenizer; get_tokenizer()"
      - name: Clean up zip files
        shell: bash
        run: rm -rf llama-index-core/llama_index/core/_static/nltk_cache/corpora/stopwords.zip llama-index-core/llama_index/core/_static/nltk_cache/tokenizers/punkt.zip
      - name: Build and publish to pypi
        uses: JRubics/poetry-publish@v1.17
        with:
          pypi_token: ${{ secrets.LLAMA_INDEX_PYPI_TOKEN }}
          ignore_dev_requirements: "yes"

      - name: Create GitHub Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
        with:
          tag_name: ${{ github.ref }}
          release_name: ${{ github.ref }}
          draft: false
          prerelease: false

      - name: Get Asset name
        run: |
          export PKG=$(ls dist/ | grep tar)
          set -- $PKG
          echo "name=$1" >> $GITHUB_ENV
      - name: Upload Release Asset (sdist) to GitHub
        id: upload-release-asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: dist/${{ env.name }}
          asset_name: ${{ env.name }}
          asset_content_type: application/zip
